/*
对Date的扩展，将 Date 转化为指定格式的String
月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
(new Date()).format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
(new Date()).format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
*/
Date.prototype.format = function (fmt) { // eslint-disable-line
  fmt = fmt || 'yyyy-MM-dd'
  let obj = {
    'y': this.getFullYear(), // 年份，注意必须用getFullYear
    'M': this.getMonth() + 1, // 月份，注意是从0-11
    'd': this.getDate(), // 日期
    'q': Math.floor((this.getMonth() + 3) / 3), // 季度
    'w': this.getDay(), // 星期，注意是0-6
    'H': this.getHours(), // 24小时制
    'h': this.getHours() % 12 === 0 ? 12 : this.getHours() % 12, // 12小时制
    'm': this.getMinutes(), // 分钟
    's': this.getSeconds(), // 秒
    'S': this.getMilliseconds() // 毫秒
  }
  let week = ['天', '一', '二', '三', '四', '五', '六']
  for (let i in obj) {
    fmt = fmt.replace(new RegExp(i + '+', 'g'), function (m) {
      let val = obj[i] + ''
      if (i === 'w') return (m.length > 2 ? '星期' : '周') + week[val]
      for (let j = 0, len = val.length; j < m.length - len; j++) val = '0' + val
      return m.length === 1 ? val : val.substring(val.length - m.length)
    })
  }
  return fmt
}
